// pages/order-list-sadmin/order-list-sadmin.js
const app = getApp()
const { request } = require("../../utils/request")

Page({
  data: {
    orderList: [],
    searchParams: {
      buyerName: "",
      phone: "",
      companyName: "",
      status: null,
    },
    companyList: [],
    statusOptions: [
      { value: 2, label: "已付款" },
      { value: 4, label: "已完成" },
    ],
    selectedStatus: {},
    statusMap: {
      0: "未付款",
      1: "已付款可退款",
      2: "已付款",
      3: "已取消",
      4: "已完成",
    },
    showDetail: false,
    currentOrder: null,
    showSearchForm: false, // 默认收起搜索表单
    orderTotal: "0.00", // 订单总价
  },

  onLoad() {
    this.loadOrderList()
    this.loadCompanyList()
  },

  // 切换搜索表单显示状态
  toggleSearchForm() {
    const newState = !this.data.showSearchForm
    this.setData({
      showSearchForm: newState,
    })

    // 如果是展开状态，确保滚动到顶部以便用户看到完整的搜索表单
    if (newState) {
      wx.pageScrollTo({
        scrollTop: 0,
        duration: 300,
      })
    }
  },

  // 加载订单列表
  loadOrderList() {
    wx.showLoading({ title: "加载中..." })

    // 构建请求参数，过滤掉空值
    const params = {}
    if (this.data.searchParams.buyerName) {
      params.buyerName = this.data.searchParams.buyerName
    }
    if (this.data.searchParams.phone) {
      params.phone = this.data.searchParams.phone
    }
    if (this.data.searchParams.companyName) {
      params.companyName = this.data.searchParams.companyName
    }
    if (this.data.searchParams.status !== null) {
      params.status = this.data.searchParams.status
    }

    console.log("请求参数", params)

    // 使用封装的请求方法
    request({
      url: `${app.globalData.baseUrl}/sadmin/order/getOrderList`,
      method: "GET",
      data: params,
    })
      .then((res) => {
        console.log("订单列表:", res)
        if (res.statusCode === 200 && res.data.code === 1) {
          this.setData({
            orderList: res.data.data || [],
          })
        } else {
          wx.showToast({
            title: res.data.msg || "获取订单列表失败",
            icon: "none",
          })
        }
      })
      .catch((err) => {
        console.error("请求失败:", err)
        wx.showToast({ title: "获取订单列表失败", icon: "none" })
      })
      .finally(() => wx.hideLoading())
  },

  // 加载公司列表
  loadCompanyList() {
    request({
      url: `${app.globalData.baseUrl}/searchCompany`,
      method: "GET",
    })
      .then((res) => {
        console.log("公司列表:", res)
        if (res.statusCode === 200 && res.data.code === 1) {
          this.setData({
            companyList: res.data.data || [],
          })
        } else {
          wx.showToast({ title: "获取公司列表失败", icon: "none" })
        }
      })
      .catch((err) => {
        console.error("请求失败:", err)
        wx.showToast({ title: "获取公司列表失败", icon: "none" })
      })
  },

  // 搜索输入处理
  onSearchInput(e) {
    const field = e.currentTarget.dataset.field
    this.setData({
      [`searchParams.${field}`]: e.detail.value,
    })
  },

  // 公司选择变更处理
  onCompanyChange(e) {
    const index = e.detail.value
    const selectedCompany = this.data.companyList[index]

    this.setData({
      "searchParams.companyName": selectedCompany.name,
    })
  },

  // 订单状态选择变更处理
  onStatusChange(e) {
    const index = e.detail.value
    const selectedStatus = this.data.statusOptions[index]

    this.setData({
      selectedStatus: selectedStatus,
      "searchParams.status": selectedStatus.value,
    })
  },

  // 搜索订单
  searchOrders() {
    console.log("搜索参数:", this.data.searchParams)

    // 检查中文参数是否正确
    if (this.data.searchParams.companyName) {
      console.log("公司名称:", this.data.searchParams.companyName)
    }
    if (this.data.searchParams.buyerName) {
      console.log("下单人:", this.data.searchParams.buyerName)
    }

    this.loadOrderList()
    // 搜索后自动收起搜索表单
    this.setData({
      showSearchForm: false,
    })
  },

  // 重置搜索条件
  resetSearch() {
    this.setData({
      searchParams: {
        buyerName: "",
        phone: "",
        companyName: "",
        status: null,
      },
      selectedStatus: {},
    })

    this.loadOrderList()
  },

  // 显示订单详情
  showOrderDetail(e) {
    const order = e.currentTarget.dataset.order
    console.log("订单详情数据:", order)
    console.log("下单时间:", order.orderTime)
    console.log("支付时间:", order.payTime)

    // 计算订单总价
    const orderTotal = this.calculateOrderTotal(order)
    console.log("计算的订单总价:", orderTotal)

    this.setData({
      showDetail: true,
      currentOrder: order,
      orderTotal: orderTotal,
    })

    // 确认数据已经设置
    console.log("设置后的订单总价:", this.data.orderTotal)
  },

  // 关闭订单详情
  closeDetail() {
    this.setData({
      showDetail: false,
      currentOrder: null,
      orderTotal: "0.00",
    })
  },

  // 格式化日期
  formatDate(dateString) {
    if (!dateString) return "暂无"

    try {
      // 处理字符串格式的日期
      if (typeof dateString === "string") {
        // 如果是标准格式的日期字符串，直接返回
        if (dateString.includes("-") && dateString.includes(":")) {
          return dateString
        }
      }

      // 处理时间戳或其他格式
      const date = new Date(dateString)
      if (isNaN(date.getTime())) {
        return "日期格式错误"
      }

      const year = date.getFullYear()
      const month = (date.getMonth() + 1).toString().padStart(2, "0")
      const day = date.getDate().toString().padStart(2, "0")
      const hour = date.getHours().toString().padStart(2, "0")
      const minute = date.getMinutes().toString().padStart(2, "0")

      return `${year}-${month}-${day} ${hour}:${minute}`
    } catch (error) {
      console.error("Date formatting error:", error)
      return "日期格式错误"
    }
  },

  // 计算订单总价
  calculateOrderTotal(order) {
    if (!order || !order.orderDetailVoList || order.orderDetailVoList.length === 0) {
      console.log("订单或订单详情为空")
      return "0.00"
    }

    try {
      console.log("订单详情列表:", order.orderDetailVoList)

      const total = order.orderDetailVoList.reduce((sum, item) => {
        const price = Number.parseFloat(item.price) || 0
        const count = Number.parseInt(item.count) || 0
        console.log(`商品: ${item.name}, 价格: ${price}, 数量: ${count}, 小计: ${price * count}`)
        return sum + price * count
      }, 0)

      console.log("计算得到的总价:", total)
      return total.toFixed(2)
    } catch (error) {
      console.error("计算订单总价出错:", error)
      return "0.00"
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {},

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {},

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {},

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {},

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {},

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {},

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {},
})
